home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / tools / ldrgb04 / ldrgb04s.lzh / LDRGB.S < prev    next >
Text File  |  1997-09-16  |  59KB  |  2,635 lines

  1. *********************************************************************************
  2. *    RGB Loader                    <LDRGB.X Ver. 0.04+>    *
  3. *********************************************************************************
  4.  
  5.     .include    doscall.mac
  6.     .include    iocscall.mac
  7.     .include    myconst.h
  8.  
  9.     .xref    _Gxput
  10.  
  11.     .text
  12.     .even
  13.  
  14. start:
  15.     lea.l    mysp(pc),sp        *スタックセット
  16.  
  17.     lea.l    16(a0),a0        *余分なメモリ開放
  18.     suba.l    a0,a1
  19.     move.l    a1,-(sp)
  20.     move.l    a0,-(sp)
  21.     DOS    _SETBLOCK
  22.     addq.l    #8,sp
  23.  
  24.     bsr    cmdchk            *コマンドラインの解析
  25.     bsr    buf_get            *バッファ確保
  26.     bsr    super            *スーパーモードへ
  27.     bsr    cursol_clr        *カーソル消す
  28.     bsr    name_get        *ファイル名を取得し処理する
  29.     bsr    user            *ユーザモードへ
  30.     bsr    buf_free        *バッファ開放
  31.     bsr    exit            *終了処理
  32.     DOS    _EXIT
  33.  
  34. *****************************************************************
  35. *    ファイル名を取得し、ファイルの読み込みを行う        *
  36. *****************************************************************
  37. name_get:
  38.     clr.w    file_cnt        *ファイル数のカウント初期化
  39.     move.l    buff_addr(pc),gr_addr    *画像アドレスの初期化
  40.     bsr    pal_set            *パレットの初期化
  41.  
  42.     bsr    chkname            *ファイル名に対する前処理
  43.     bsr    chkext            *拡張子が省略されているかチェック
  44.  
  45.     move.w    #ARCHIVE,-(sp)        *最初のファイルを検索する
  46.     pea.l    arg1(pc)        *
  47.     pea.l    filbuf(pc)        *
  48.     DOS    _FILES            *
  49.     lea.l    10(sp),sp        *
  50.  
  51. loop:
  52.     tst.l    d0            *ファイルは見つかったか?
  53.     bmi    done            * 見つからなければ処理完了
  54.  
  55.     bsr    setpath            *得られたファイル名を
  56.                     * フルパスに再構成する
  57.  
  58.     bsr    main            *メイン処理
  59.  
  60.     tst.b    esc_flg            *エスケープ?
  61.     bne    done
  62.  
  63.     pea.l    filbuf(pc)        *つぎのファイルを検索する
  64.     DOS    _NFILES            *
  65.     addq.l    #4,sp            *
  66.  
  67.     bra    loop            *繰り返す
  68.  
  69. done:
  70.     bsr    rw_chk            *画面の描き直し
  71.     bsr    file_cnt_chk        *処理したファイル数のチェック
  72.     rts
  73.  
  74. *****************************************************************
  75. *    files実行に先立ってファイル名に前処理を加える        *
  76. *****************************************************************
  77. chkname:
  78.     pea.l    nambuf(pc)        *ファイル名を展開する
  79.     pea.l    arg1(pc)        *
  80.     DOS    _NAMECK            *
  81.     addq.l    #8,sp            *
  82.  
  83.     tst.l    d0            *d0<0なら
  84.     bmi    name_er            * ファイル名の指定に誤りがある
  85.  
  86.     beq    nowild            *d0=0ならワイルドカード指定なし
  87.  
  88.     cmpi.w    #$00ff,d0        *d0≠FFHなら
  89.     bne    wild            * ワイルドカード指定あり
  90.  
  91. noname:                    *ファイル名が指定されていない場合
  92.     lea.l    arg1(pc),a0        *バッファarg1に
  93.     lea.l    nambuf(pc),a1        * nameckで展開したパス名+'*.RGB'
  94.     bsr    strcpy            * を再構成する
  95.     lea.l    kome0(pc),a1        *
  96.     bsr    strcpy            *
  97.  
  98. wild:                    *ワイルドカードが指定された場合
  99.                     *何もしなくてよい
  100. cknam0:
  101.     rts
  102.  
  103. nowild:                    *ワイルドカードが指定されていない場合
  104.     move.w    #SUBDIR,-(sp)        *サブディレクトリであると仮定して
  105.     pea.l    arg1(pc)        * 検索してみる
  106.     pea.l    filbuf(pc)        *
  107.     DOS    _FILES            *
  108.     lea.l    10(sp),sp        *
  109.     
  110.     tst.l    d0            *見つかったか?
  111.     bmi    cknam0            * 見つからなければファイルだろう
  112.  
  113.     lea.l    arg1(pc),a0        *バッファarg1に
  114.     lea.l    komekome(pc),a1        * もとのファイル名+'\*.RGB'
  115.     bsr    strcat            * を再構成する
  116.  
  117.     bra    chkname            *nameckでファイル名を展開するために
  118.                     * サブルーチン先頭に戻る
  119.  
  120. *****************************************************************
  121. *    files,nfilesで見付けたファイル名をフルパスに構成し直し    *
  122. *        arg1以降に格納する                *
  123. *****************************************************************
  124. setpath:
  125.     lea.l    arg1(pc),a0        *a0=コピー先
  126.     lea.l    nambuf(pc),a1        *a1=nameckで展開したパス名
  127.     bsr    strcpy            *コピーする
  128.     lea.l    filbuf(pc),a1        *a1=files,nfilesで見付けたファイル名
  129.     lea.l    30(a1),a1
  130.     bsr    strcpy            *連結する
  131.     rts
  132.  
  133. *****************************************************************
  134. *    文字列の連結および複写                    *
  135. *    リターン時a0は文字列末の00Hを指す            *
  136. *****************************************************************
  137. strcat:
  138.     tst.b    (a0)+            *(a0)は0か?
  139.     bne    strcat            *そうでなければ繰り返す
  140.     subq.l    #1,a0            *行きすぎたから1つ戻る
  141. strcpy:
  142.     move.b    (a1)+,(a0)+        *1文字ずつ
  143.     bne    strcpy            *終了コードまでを転送する
  144.     subq.l    #1,a0            *a0は進み過ぎている
  145.                     *a0は文字列末の00Hを指す
  146.     rts
  147.  
  148. *****************************************************************
  149. *    拡張子を補う                        *
  150. *****************************************************************
  151. chkext:
  152.     lea.l    arg1(pc),a0        *ファイル名のアドレス
  153.     lea.l    dext(pc),a1        *拡張子のアドレス
  154. chkext0:
  155.     cmp.b    #".",(a0)        *拡張子があるか
  156.     beq    chkext2
  157.     tst.b    (a0)+            *(a0)は0か?
  158.     bne    chkext0            *そうでなければ繰り返す
  159.     subq.l    #1,a0            *行きすぎたから1つ戻る
  160. chkext1:
  161.     move.b    (a1)+,(a0)+        *1文字転送
  162.     bne    chkext1            *終了コードまで繰り返す
  163. chkext2:
  164.     rts
  165.  
  166. *****************************************************************
  167. *    コマンドラインのチェックを行う                *
  168. *****************************************************************
  169. cmdchk:
  170.     lea.l    arg1(pc),a0        *a0=引数切り出し領域
  171.     addq.l    #1,a2            *a2=コマンドライン文字列先頭
  172.     move.w    #1,clr_mode        *画面クリアモードの初期値
  173.     clr.w    x_pos            *ロード座標の初期化
  174.     clr.w    y_pos
  175.  
  176. cmdchk0:
  177.     bsr    switch_chk        *スイッチのチェック
  178.  
  179.     tst.b    (a2)            *引数があるか?
  180.     beq    usage            *ないならファイル名が足りない
  181.     bsr    getarg            *ファイル名切り出し
  182.     bsr    switch_chk        *さらにスイッチのチェック
  183.     tst.b    (a2)            *引数があるか?
  184.     bne    usage            * あるなら引数が多い
  185. cmdchk1:
  186.     rts
  187.  
  188. *****************************************************************
  189. *    スペースを飛ばしつぎの引数先頭までポインタを進め    *
  190. *    スイッチがあれば処理してしまう                *
  191. *****************************************************************
  192. switch_chk:
  193.     bsr    skipsp            *スペースをスキップする
  194.     tst.b    (a2)            *まだスイッチがあるか?
  195.     beq    switch_chk2        *ないなら戻る(処理の振り分けを行う)
  196.  
  197.     cmpi.b    #'/',(a2)        *引数の先頭が
  198.     beq    switch_chk1        */,-であれば
  199.     cmpi.b    #'-',(a2)        *  スイッチ
  200.     beq    switch_chk1        *
  201.     bra    switch_chk2        *スイッチでないなら戻る
  202.  
  203. switch_chk1:
  204.     addq.l    #1,a2            *'/'や'-'の分ポインタを進める
  205.     tst.b    (a2)            *スイッチがあるか?
  206.     beq    usage            * ないなら使用方表示
  207.     move.b    (a2)+,d0        *1文字取り出す
  208.     bsr    toupper            *大文字に変換しておく
  209.  
  210.     cmpi.b    #'K',d0            *Kスイッチ?
  211.     beq    ksw            * そうなら分岐
  212.     cmpi.b    #'C',d0
  213.     beq    csw
  214.     cmpi.b    #'L',d0
  215.     beq    lsw
  216.     cmpi.b    #'D',d0
  217.     beq    dsw
  218.     cmpi.b    #'M',d0
  219.     beq    msw
  220.     cmpi.b    #'R',d0
  221.     beq    rsw
  222.     bra    usage            *無効なスイッチが指定された
  223.  
  224. ksw:
  225.     tst.b    kflg            *スイッチの二重指定チェック
  226.     bne    usage
  227.     st    kflg            *KスイッチON
  228.     bra    switch_chk        *まだスイッチがあるかもしれない
  229.  
  230. csw:
  231.     bsr    csw_ana
  232.     bra    switch_chk
  233.  
  234. lsw:
  235.     bsr    lsw_ana
  236.     bra    switch_chk
  237.  
  238. dsw:
  239.     tst.b    dflg
  240.     bne    usage
  241.     st    dflg
  242.     bra    switch_chk
  243.  
  244. msw:
  245.     tst.b    mflg
  246.     bne    usage
  247.     st    mflg
  248.     bra    switch_chk
  249.  
  250. rsw:
  251.     tst.b    rflg
  252.     bne    usage
  253.     st    rflg
  254.     bra    switch_chk
  255.  
  256. switch_chk2:
  257.     rts
  258.  
  259. *****************************************************************
  260. *    Cスイッチの解析                    *
  261. *****************************************************************
  262. csw_ana:
  263.     tst.b    cflg            *Cスイッチの2重指定
  264.     bne    usage
  265.     st    cflg
  266.  
  267.     move.b    (a2),d0            *1文字取り出す
  268.     cmp.b    #' ',d0            *Cだけかな
  269.     beq    csw_ana9        *画面クリアモードの指定なし
  270.     bsr    num_read
  271.     cmp.w    #3,d0
  272.     bhi    usage
  273.     move.w    d0,clr_mode
  274.     subq.l    #1,a2            *1文字戻す
  275. csw_ana9:
  276.     rts
  277.  
  278. *****************************************************************
  279. *    Lスイッチの解析                    *
  280. *****************************************************************
  281. lsw_ana:
  282.     move.b    (a2),d0            *1文字取り出す
  283.     bsr    toupper            *大文字に変換しておく
  284.     cmp.b    #'C',d0            *LCかな
  285.     bne    lsw_ana1
  286.     tst.b    lflg            *Lスイッチも指定している
  287.     bne    usage
  288.     tst.b    lcflg            *LCスイッチの2重指定
  289.     bne    usage
  290.     st    lcflg            *LCスイッチオン
  291.     addq.l    #1,a2            *1文字進める
  292.     bra    lsw_ana9
  293. lsw_ana1:
  294.     cmp.b    #' ',d0            *Lだけかな
  295.     bne    lsw_ana2        *ロード座標を指定している
  296.     clr.w    x_pos            *ロード座標を0,0
  297.     clr.w    y_pos
  298.     bra    lsw_ana9
  299. lsw_ana2:
  300.     bsr    num_read        *Xチェック
  301.     cmp.w    #511,d0            *Xが511を越える時
  302.     bhi    but_pos
  303.     move.w    d0,x_pos
  304.     cmp.b    #',',-1(a2)
  305.     bne    usage
  306.     bsr    num_read        *Yチェック
  307.     cmp.w    #511,d0            *Yが511を越える時
  308.     bhi    but_pos
  309.     move.w    d0,y_pos
  310.     st    lflg            *Lスイッチオン
  311.     subq.l    #1,a2            *1文字戻す
  312. lsw_ana9:
  313.     rts
  314.  
  315. *****************************************************************
  316. *    ファイル名を切り出す                    *
  317. *****************************************************************
  318. getarg:
  319.     move.l    a0,-(sp)        *{レジスタ待避
  320. gtarg0:    tst.b    (a2)            *1)文字列の終端コードか
  321.     beq    gtarg1            *
  322.     cmpi.b    #SPACE,(a2)        *2)スペースか
  323.     beq    gtarg1            *
  324.     cmpi.b    #TAB,(a2)        *3)タブか
  325.     beq    gtarg1            *
  326. *    cmpi.b    #'-',(a2)        *4)ハイフンか
  327. *    beq    gtarg1            *
  328.     cmpi.b    #'/',(a2)        *5)スラッシュ
  329.     beq    gtarg1            *
  330.     move.b    (a2)+,(a0)+        * が現れるまで転送を
  331.     bra    gtarg0            * 繰り返す
  332. gtarg1:    clr.b    (a0)            *文字列終端コードを書き込む
  333.     movea.l    (sp)+,a0        *}レジスタ復帰
  334.     rts
  335.  
  336. *****************************************************************
  337. *    スペース・TABをスキップする                *
  338. *****************************************************************
  339. skipsp0:
  340.     addq.l    #1,a2
  341. skipsp:
  342.     cmpi.b    #$20,(a2)
  343.     beq    skipsp0
  344.     cmpi.b    #$09,(a2)
  345.     beq    skipsp0
  346.     rts
  347.  
  348. *****************************************************************
  349. *    小文字→大文字変換ルーチン                *
  350. *****************************************************************
  351. toupper:
  352.     cmpi.b    #'a',d0
  353.     bcs    toupr0
  354.     cmpi.b    #'z'+1,d0
  355.     bcc    toupr0
  356.     subi.b    #$20,d0
  357. toupr0:
  358.     rts
  359.  
  360. *****************************************************************
  361. *    数字の解析    d0に数字を返す                *
  362. *****************************************************************
  363. num_read:
  364.     clr.w    d0
  365. num_read0:
  366.     clr.w    d1
  367.     move.b    (a2)+,d1
  368.     sub.b    #'0',d1
  369.     cmp.b    #10,d1
  370.     bcc.b    num_read1
  371.     mulu    #10,d0
  372.     add.w    d1,d0
  373.     bra.b    num_read0
  374. num_read1:
  375.     rts
  376.  
  377. *****************************************************************
  378. *    メイン処理                        *
  379. *****************************************************************
  380. main:
  381.     sf    skip_flg        *スキップフラグ初期化
  382.     sf    ipr_flg            *IPRフラグをありにする
  383.     bsr    ipr_check        *IPRファイルのチェック
  384.  
  385.     lea.l    arg1(pc),a0        *ファイル名セット
  386.     bsr    file_open        *ファイルオープン
  387.  
  388.     tst.b    ipr_flg            *
  389.     beq    main1
  390.  
  391.     bsr    file_size
  392.     move.l    d6,fi_size
  393.     bsr    def_check        *ファイルサイズからデフォルトサイズをチェック
  394.     tst.b    skip_flg
  395.     bne    main9_
  396.  
  397. main1:
  398.     bsr    size_set        *サイズのセット
  399.  
  400.     move.l    buff_size(pc),d0    *メモリチェック
  401.     cmp.l    fi_size(pc),d0
  402.     bcs    main9
  403.  
  404.     bsr    crtmode_set        *画面モードの設定
  405.     bsr    scroll_set        *スクロール変数の設定
  406.     bsr    lsw_chk            *ロード座標・センタリングチェック
  407.  
  408.     tst.b    int_flg            *1回目のグラフィック初期化ここで行う
  409.     bne    main2
  410. *    bsr    gr_off            *グラフィック画面オフ
  411.     bsr    scr_int            *画面の初期化
  412.     bsr    crtmode_int        *画面モードの初期化
  413.     bsr    scroll_int        *スクロール座標の初期化
  414.     bsr    gr_int            *グラフィック画面の初期化チェック
  415. main2:
  416.     movea.l    buff_addr(pc),a4    *ファイル読む
  417.     move.l    fi_size(pc),d6
  418.     bsr    file_read
  419.     bsr    file_close        *ファイルクローズ
  420.  
  421.     bsr    irohen24        *1画面分変換しておく
  422.  
  423.     tst.b    int_flg            *2回目以降のグラフィック初期化ここで行う
  424.     beq    main3
  425.     bsr    gr_off            *グラフィック画面オフ
  426. *    bsr    crtmode_int        *画面モードの初期化
  427.     bsr    scroll_int        *スクロール座標の初期化
  428.     bsr    gr_int            *グラフィック画面の初期化チェック
  429. main3:
  430.     bsr    gr_on            *グラフィック画面オン
  431.     bsr    inf_mode        *
  432.     bsr    bit24_prt        *最初の1画面表示
  433.  
  434. main8:
  435.     bsr    scroll            *グラフィックをスクロール
  436.     add.w    #1,file_cnt        *ファイル数のカウント+1
  437.     rts
  438.  
  439. main9:
  440.     bsr    file_close
  441.     bsr    no_buff2
  442.     st    skip_flg
  443.     rts
  444.  
  445. main9_:
  446.     bsr    file_close
  447.     bsr    ipr_err
  448.     rts
  449.  
  450. *****************************************************************
  451. *    IPRファイルの読み込み                    *
  452. *****************************************************************
  453. ipr_check:
  454.     bsr    ipr_name_set        *IPRファイル名作成
  455.  
  456.     move.w    #0,-(sp)        *ファイルopen
  457.     pea.l    arg2(pc)
  458.     DOS    _OPEN
  459.     addq.l    #6,sp
  460.     tst.l    d0
  461.     bmi    ipr_check1
  462.     move.w    d0,d7
  463.  
  464.     bsr    file_size
  465.     movea.l    buff_addr(pc),a4
  466.     bsr    file_read
  467.     bsr    file_close
  468.  
  469.     movea.l    buff_addr(pc),a0
  470.     bsr    ipr_check5
  471.     move.w    d0,yoko
  472.     bsr    ipr_check5
  473.     move.w    d0,tate
  474.  
  475.     rts
  476.  
  477. ipr_check1:
  478.     st    ipr_flg                *IPRなし
  479.     rts
  480.  
  481.  
  482. ipr_check5:
  483.     moveq.l    #0,d0
  484.     moveq.l    #0,d1
  485. ipr_check6:
  486.     cmp.b    #' ',(a0)+
  487.     beq    ipr_check6
  488.     subq.l    #1,a0
  489. ipr_check7:
  490.     move.b    (a0)+,d1
  491.     cmp.b    #' ',d1
  492.     beq    ipr_check8
  493.     sub.b    #'0',d1
  494.     mulu    #10,d0
  495.     add.w    d1,d0
  496.     bra    ipr_check7
  497. ipr_check8:
  498.     subq.l    #1,a0
  499.     rts
  500.  
  501. *****************************************************************
  502. *    サイズセット                        *
  503. *****************************************************************
  504. size_set:
  505.     move.w    yoko(pc),d0        *1ラインのバイト数(加工前)
  506.     move.w    d0,d1
  507.     add.w    d1,d1
  508.     add.w    d1,d0
  509.     move.w    d0,line_byte1
  510.  
  511.     mulu.w    tate(pc),d0        *ファイルサイズ計算
  512.     move.l    d0,fi_size
  513.  
  514.     move.w    yoko(pc),d0        *1ラインのバイト数(加工後)
  515.     add.w    d0,d0
  516.     move.w    d0,line_byte2
  517.     rts
  518.  
  519. *****************************************************************
  520. *    デフォルトサイズをチェック                *
  521. *****************************************************************
  522. def_check:
  523.     lea.l    size_table(pc),a0
  524.     move.l    fi_size(pc),d0
  525.     bra    def_check1
  526.  
  527. def_check0:
  528.     addq.l    #4,a0
  529. def_check1:
  530.     move.l    (a0)+,d1
  531.     beq    def_check9        *テーブルになかった
  532.     cmp.l    d0,d1
  533.     bne    def_check0
  534.     move.w    (a0)+,yoko
  535.     move.w    (a0)+,tate
  536.     rts
  537.  
  538. def_check9:
  539.     st    skip_flg
  540.     rts
  541.  
  542. *****************************************************************
  543. *    IPR名の作成                        *
  544. *****************************************************************
  545. ipr_name_set:
  546.     lea.l    arg1(pc),a1        *転送元
  547.     lea.l    arg2(pc),a0        *転送先
  548.     bsr    strcpy            *ファイル名を複写する
  549.  
  550.     lea.l    arg2(pc),a0        *拡張子を'IPR'に変更
  551.     lea.l    cext1(pc),a1
  552.     bsr    cheng_ext
  553.     rts
  554.  
  555. *****************************************************************
  556. *    拡張子を変更する                    *
  557. *****************************************************************
  558. cheng_ext:
  559. *    lea.l    arg2(pc),a0        *ファイル名のアドレス
  560. *    lea.l    cext1(pc),a1
  561. cheng_ext0:
  562.     cmp.b    #".",(a0)+        *拡張子があるか
  563.     bne    cheng_ext0
  564.     subq.l    #1,a0            *行きすぎたから1つ戻る
  565. cheng_ext1:
  566.     move.b    (a1)+,(a0)+        *1文字転送
  567.     bne    cheng_ext1        *終了コードまで繰り返す
  568. cheng_ext2:
  569.     rts
  570.  
  571. *****************************************************************
  572. *    ロード座標のチェック                    *
  573. *****************************************************************
  574. lsw_chk:
  575.     tst.b    lflg            *Lスイッチ指定
  576.     bne    l_chk            *指定あり
  577.     tst.b    lcflg            *LCスイッチ指定
  578.     bne    lc_chk            *指定あり
  579.     rts
  580.  
  581. l_chk:
  582.     move.w    x_pos(pc),d0        *横にはみ出るか
  583.     beq    l_chk1
  584.     add.w    yoko(pc),d0
  585.     cmp.w    crt_x(pc),d0
  586.     bhi    but_pos            *はみ出る
  587. l_chk1
  588.     move.w    y_pos(pc),d0        *縦にはみ出るか
  589.     beq    l_chk2
  590.     add.w    tate(pc),d0
  591.     cmp.w    crt_y(pc),d0
  592.     bhi    but_pos            *はみ出る
  593. l_chk2
  594.     rts
  595.  
  596.  
  597. lc_chk:
  598.     clr.w    x_pos            *ロード座標を初期化
  599.     clr.w    y_pos
  600.  
  601.     move.w    crt_x(pc),d0        *X方向のセンタリング
  602.     sub.w    yoko(pc),d0
  603.     bmi    lc_chk1
  604.     lsr.w    #1,d0            *d0を1/2
  605.     move.w    d0,x_pos
  606. lc_chk1:
  607.     move.w    crt_y(pc),d0        *Y方向のセンタリング
  608.     sub.w    tate(pc),d0
  609.     bmi    lc_chk2
  610.     lsr.w    #1,d0            *d0を1/2
  611.     move.w    d0,y_pos
  612. lc_chk2:
  613.     rts
  614.  
  615. *****************************************************************
  616. *    スクロール画面の初期化                    *
  617. *****************************************************************
  618. scroll_int:
  619.     clr.w    d2            *スクロール座標初期化
  620.     clr.w    d3
  621.     bsr    x_set
  622.     bsr    y_set
  623.     rts
  624.  
  625. *****************************************************************
  626. *    画面モードの設定                    *
  627. *****************************************************************
  628. crtmode_set:
  629.     move.w    #0,crt_mode
  630.     move.w    #$03,vctr_r0
  631.     move.w    #$2f,vctr_r2
  632.     rts
  633.  
  634. *****************************************************************
  635. *    スクロール変数の設定                    *
  636. *****************************************************************
  637. scroll_set:
  638.     lea.l    dot_tbl(pc),a0        *ドット数テーブル
  639.     move.w    crt_mode(pc),d0
  640.     add.w    d0,d0
  641.     add.w    d0,d0
  642.     move.l    0(a0,d0.w),a0
  643.  
  644.     move.w    (a0),crt_x        *CRTのXドット数
  645.     move.w    2(a0),crt_y        *     Yドット数
  646.  
  647.     move.w    yoko(pc),d0        *横スクロール出来るドット数を計算
  648.     sub.w    crt_x(pc),d0
  649.     bpl    scroll_set0
  650.     clr.w    d0
  651. scroll_set0:
  652.     move.w    d0,x_max
  653.  
  654.     move.w    tate(pc),d0        *縦スクロール出来るドット数を計算
  655.     sub.w    crt_y(pc),d0
  656.     bpl    scroll_set1
  657.     clr.w    d0
  658. scroll_set1:
  659.     move.w    d0,y_max
  660.     rts
  661.  
  662. *****************************************************************
  663. *    画面の初期化を行う                    *
  664. *****************************************************************
  665. scr_int:
  666.     st    int_flg            *画面の初期化は一回だけ
  667.  
  668.     move.w    clr_mode(pc),d0        *テキスト画面消去の指定があるか
  669.     btst.l    #0,d0
  670.     beq    scr_int9        *指定無し
  671.  
  672.     IOCS    _MS_CUROF        *マウスカーソル消す
  673.     moveq.l    #0,d1            *ソフトキーボード消す
  674.     moveq.l    #0,d2
  675.     IOCS    _SKEY_MOD
  676.     bsr    func_off        *ファンクションキー消す
  677.     bsr    text_clr        *テキストクリア
  678.     move.w    #$1e,d1            *カーソルをHOMEポジションへ
  679.     IOCS    _B_PUTC
  680. scr_int9:
  681.     rts
  682.  
  683. *****************************************************************
  684. *    画面のモードの初期化を行う                *
  685. *****************************************************************
  686. crtmode_int:
  687.     move.w    vctr_r0(pc),$e82400    *色モード・実画面サイズ設定
  688.     move.w    #$06e4,$e82500        *画面の優先順位
  689.  
  690.     cmp.w    #2,clr_mode        *グラフィック画面消去の指定
  691.     bcs    crtmode_int1        *指定無し
  692.  
  693.     move.w    #$0020,$e82600        *GRoff・TEXTon
  694.     bra    crtmode_int2
  695. crtmode_int1:
  696.     move.w    vctr_r2(pc),$e82600    *GR・TEXT画面オン
  697. crtmode_int2:
  698.     bsr    v_wait
  699.     bsr    crtc_set        *crtcレジスタ設定
  700.     rts
  701.  
  702. *****************************************************************
  703. *    グラフィック画面の消去                    *
  704. *****************************************************************
  705. gr_int:
  706.     cmp.w    #2,clr_mode        *グラフィック画面消去の指定が無い時は無視
  707.     bcs    gr_int9            *指定無し
  708.  
  709. gr_int0:
  710.     tst.b    mflg
  711.     beq    gr_int3            *強制MPUクリア
  712.  
  713. gr_int1:
  714.     movem.l    d0-d7/a0-a6,-(sp)
  715.  
  716.     moveq.l    #0,d0            *レジスタクリア
  717.     move.l    d0,d1
  718.     move.l    d0,d2
  719.     move.l    d0,d3
  720.     move.l    d0,d4
  721.     move.l    d0,d5
  722.     move.l    d0,d6
  723.     move.l    d0,d7
  724.     movea.l    d0,a1
  725.     movea.l    d0,a2
  726.     movea.l    d0,a3
  727.     movea.l    d0,a4
  728.     movea.l    d0,a5
  729.     movea.l    d0,a6
  730.  
  731.     movea.l    #GRAM_MAX,a0
  732.     move.w    #512,line_cnt
  733.  
  734. gr_int2:
  735.     movem.l    d0-d7/a1-a6,-(a0)    *14*4=56
  736.     movem.l    d0-d7/a1-a6,-(a0)
  737.     movem.l    d0-d7/a1-a6,-(a0)
  738.     movem.l    d0-d7/a1-a6,-(a0)
  739.     movem.l    d0-d7/a1-a6,-(a0)
  740.     movem.l    d0-d7/a1-a6,-(a0)
  741.     movem.l    d0-d7/a1-a6,-(a0)
  742.     movem.l    d0-d7/a1-a6,-(a0)
  743.     movem.l    d0-d7/a1-a6,-(a0)
  744.     movem.l    d0-d7/a1-a6,-(a0)
  745.     movem.l    d0-d7/a1-a6,-(a0)
  746.     movem.l    d0-d7/a1-a6,-(a0)
  747.     movem.l    d0-d7/a1-a6,-(a0)
  748.     movem.l    d0-d7/a1-a6,-(a0)
  749.     movem.l    d0-d7/a1-a6,-(a0)
  750.     movem.l    d0-d7/a1-a6,-(a0)
  751.     movem.l    d0-d7/a1-a6,-(a0)
  752.     movem.l    d0-d7/a1-a6,-(a0)
  753.     movem.l    d0-d3,-(a0)
  754.     subq.w    #1,line_cnt
  755.     bne    gr_int2
  756.  
  757.     movem.l    (sp)+,d0-d7/a0-a6
  758.     rts
  759.  
  760. gr_int3:
  761.     move.w    $e8002a,-(sp)        *ハードウェアクリア
  762.     bsr    v_wait
  763.     move.w    #$0f,$e8002a
  764.     move.b    #$02,$e80481
  765.     bsr    v_wait
  766.     move.w    (sp)+,$e8002a
  767.     rts
  768.  
  769. gr_int9:
  770.     rts
  771.  
  772. *****************************************************************
  773. *    グラフィックのオン                    *
  774. *****************************************************************
  775. gr_on:
  776.     cmp.w    #2,clr_mode        *グラフィック画面消去の指定が無い時は無視
  777.     bcs    gr_on1
  778. gr_on0:
  779.     bsr    v_wait
  780.     ori.w    #$002f,$e82600        *GRon・TEXTon
  781. gr_on1:
  782.     rts
  783.  
  784. *****************************************************************
  785. *    グラフィックのオフ                    *
  786. *****************************************************************
  787. gr_off:
  788.     cmp.w    #2,clr_mode        *グラフィック画面消去の指定が無い時は無視
  789.     bcs    gr_off1
  790. gr_off0:
  791.     bsr    v_wait
  792.     andi.w    #$ffe0,$e82600        *GRoff
  793. gr_off1:
  794.     rts
  795.  
  796. *****************************************************************
  797. *    標準パレットの設定                    *
  798. *****************************************************************
  799. pal_set:
  800.     moveq.l    #$0001,d0
  801.     move.l    #$0202,d1
  802.     movea.l    #GPAL,a0
  803.  
  804.     moveq.l    #512/4-1,d2
  805. pal_set1:
  806.     move.w    d0,(a0)+
  807.     move.w    d0,(a0)+
  808.     add.l    d1,d0
  809.     dbra.w    d2,pal_set1
  810.     rts
  811.  
  812. *****************************************************************
  813. *    画像データをコンバート                    *
  814. *****************************************************************
  815. irohen24:
  816.     moveq.l    #0,d0            *変換開始ライン番号
  817.  
  818.     move.w    tate(pc),d1        *変換ライン数
  819.     cmp.w    #512,d1
  820.     bcs    irohen24_
  821.     move.w    #512,d1
  822. irohen24_:
  823.     bsr    conv24
  824.     rts
  825.  
  826. conv24:
  827.     clr.w    rgb_x            *変換元,変換先アドレス取得
  828.     move.w    d0,rgb_y
  829.     bsr    get_rgb_addr
  830.     movea.l    a1,a0
  831.     bsr    get_glx_addr
  832.  
  833.     movea.w    yoko(pc),a4        *横ループ
  834.     move.w    d1,d5            *縦ループ
  835.     subq.w    #1,a4
  836.     subq.w    #1,d5
  837.  
  838.     move.w    #$00f8,d7        *マスクデータ
  839.  
  840.     tst.b    dflg            *ディザもどきあり?
  841.     beq    d_nashi            *指定無し
  842.  
  843.     lea.l    d_pat(pc),a5
  844.     moveq.l    #3,d3
  845.     move.w    rgb_y(pc),d4
  846.  
  847. conv24_1:
  848.     move.w    a4,d6            *横ループ
  849.  
  850.     move.w    d4,d0
  851.     and.w    d3,d0
  852.     add.w    d0,d0
  853.     add.w    d0,d0
  854.     lea.l    0(a5,d0.w),a6
  855.  
  856. conv24_2
  857.     move.w    d6,d0
  858.     and.w    d3,d0
  859.     move.b    0(a6,d0.w),d0
  860.  
  861.     move.b    (a0)+,d1        *R
  862.     add.b    d0,d1
  863.     bcc    conv24_2_
  864.     move.w    #$07c0,d1
  865.     bra    conv24_3
  866. conv24_2_
  867.     and.w    d7,d1
  868.     rol.w    #3,d1
  869.  
  870. conv24_3:
  871.     move.b    (a0)+,d2        *G
  872.     add.b    d0,d2
  873.     bcc    conv24_3_
  874.     ori.w    #$f800,d1
  875.     bra    conv24_4
  876. conv24_3_:
  877.     and.w    d7,d2
  878. *    ror.w    #8,d2
  879.     move.b    d2,-(sp)        *ror.w    #8,d2の代わり
  880.     move.w    (sp)+,d2        *
  881.     clr.b    d2            *
  882.     or.w    d2,d1
  883.  
  884. conv24_4
  885.     move.b    (a0)+,d2        *B
  886.     add.b    d0,d2
  887.     bcc    conv24_4_
  888.     ori.w    #31*2,d1
  889.     bra    conv24_5
  890. conv24_4_:
  891.     and.w    d7,d2
  892.     lsr.b    #2,d2
  893.     or.w    d2,d1
  894.  
  895. conv24_5
  896.     move.w    d1,(a1)+
  897.     dbra    d6,conv24_2
  898.     addq.w    #1,d4
  899.     dbra    d5,conv24_1
  900.     rts
  901.  
  902. d_nashi:                *ディザもどきなし
  903.     move.w    a4,d6            *横ループ
  904. d_nashi1
  905.     move.b    (a0)+,d2        *R
  906.     move.b    (a0)+,d1        *G
  907.     move.b    (a0)+,d0        *B
  908.     and.w    d7,d0
  909.     and.w    d7,d1
  910.     and.w    d7,d2
  911.     lsr.w    #2,d0
  912.     lsl.w    #3,d2
  913. *    lsl.w    #8,d1
  914.     move.b    d1,-(sp)        *lsl.w    #8,d1の代わり
  915.     move.w    (sp)+,d1        *
  916.     clr.b    d1            *
  917.     or.w    d1,d0
  918.     or.w    d2,d0            *GRB
  919.     move.w    d0,(a1)+
  920.     dbra.w    d6,d_nashi1
  921.     dbra.w    d5,d_nashi
  922.     rts
  923.  
  924. *****************************************************************
  925. *    画像データを一気に表示する                *
  926. *****************************************************************
  927. bit24_prt:
  928.     move.w    x_pos(pc),gram_x    *表示開始座標
  929.     move.w    y_pos(pc),gram_y
  930.  
  931.     clr.w    rgb_x
  932.     clr.w    rgb_y
  933.  
  934.     move.w    yoko(pc),d0
  935.     cmp.w    #512,d0            *横ドット数が512を超えるか
  936.     bls    bit24_prt1
  937.     move.w    #512,d0
  938. bit24_prt1:
  939.     move.w    d0,rgb_xd
  940.     move.w    d0,x_line
  941.  
  942.     move.w    tate(pc),d0
  943.     cmp.w    #512,d0            *横ドット数が512を超えるか
  944.     bls    bit24_prt2
  945.     move.w    #512,d0
  946. bit24_prt2:
  947.     move.w    d0,rgb_yd
  948.     move.w    d0,y_line
  949.  
  950.     bsr    get_glx_addr
  951.     bsr    get_gram_addr
  952.  
  953.     tst.b    mflg
  954.     bne    bit24_prt3
  955.     bsr    dma_move        *DMAで表示
  956.     bra    bit24_prt4
  957. bit24_prt3:
  958.     bsr    g24            *MPUで表示
  959. bit24_prt4:
  960.     rts
  961.  
  962. *****************************************************************
  963. *    DMAを使ってグラフィックへ転送する            *
  964. *****************************************************************
  965. dma_move:
  966.     move.w    rgb_yd(pc),d0        *転送サイズ縦
  967.     move.w    rgb_xd(pc),d1        *転送サイズ横
  968.     movea.w    line_byte2(pc),a3    *転送元画像の横サイズ
  969.  
  970.     sub.w    #1,d0            *縦ライン-1
  971.  
  972.     move.b    #$FF,CSR2
  973.     move.b    #8,DCR2
  974.  
  975.     btst.l    #0,d1            *横ライン数が偶数か
  976.     beq    dma_move0        *そう
  977.     move.b    #$11,OCR2        *ワード転送
  978.     bra    dma_move1
  979. dma_move0:
  980.     move.b    #$21,OCR2        *ロングワード転送
  981.     lsr.w    #1,d1            *d1を1/2
  982. dma_move1:
  983.     move.b    #%0_000_0101,SCR2
  984.     move.b    #3,CPR2
  985.     clr.b    CCR2
  986.     move.b    #5,DFC2
  987.     move.b    #5,MFC2
  988. dma_move2:
  989.     move.w    d1,MTC2            *転送サイズ
  990.     move.l    a1,MAR2            *転送元
  991.     move.l    a2,DAR2            *転送先
  992.     move.b    #$80,CCR2
  993. dma_move3:
  994.     tst.w    MTC2
  995.     bne    dma_move3
  996.     move.b    #$FF,CSR2
  997.     adda.l    a3,a1            *転送元アドレス更新
  998.     lea.l    1024(a2),a2        *転送先アドレス更新
  999.     dbra.w    d0,dma_move2
  1000.  
  1001.     rts
  1002.  
  1003. *****************************************************************
  1004. *    スクロール制御                        *
  1005. *****************************************************************
  1006. scroll:
  1007.     sf    esc_flg            *フラグ初期化
  1008.     sf    next_flg
  1009.     sf    resize_flg
  1010.     sf    inkey_flg1
  1011.     sf    inkey_flg2
  1012.     sf    inkey_flg3
  1013.  
  1014.     moveq.l    #0,d2            *スクロール座標初期化
  1015.     moveq.l    #0,d3
  1016.     clr.w    x_old
  1017.     clr.w    y_old
  1018.  
  1019.     bsr    down_demo
  1020.     bsr    right_demo
  1021.  
  1022.     tst.b    kflg            *キー入力待ち
  1023.     beq    scroll8            *指定無し
  1024.  
  1025. scroll2:
  1026.     bsr    key_chk            *キー入力チェック
  1027. *    bsr    mouse_chk        *マウスのキー入力チェック
  1028.  
  1029.     tst.b    esc_flg            *エスケープ入力
  1030.     bne    scroll9
  1031.     tst.b    next_flg        *ネクスト入力
  1032.     bne    scroll9
  1033.     tst.b    resize_flg        *縮小表示
  1034.     bne    scroll6
  1035.  
  1036.     bsr    cursor_chk        *カーソル入力チェック
  1037.     bsr    tenkey_chk        *テンキー入力チェック
  1038.     bsr    mouse_chk        *マウス入力チェック
  1039.     bsr    go_scroll        *スクロール実行
  1040.  
  1041.     bsr    v_wait            *手抜き
  1042.     bra    scroll2            *キー入力に戻る
  1043.  
  1044. scroll6:                *一画面表示
  1045.     bsr    gr_off0
  1046.     bsr    gr_int0
  1047.     bsr    gr_on0
  1048.     bsr    scroll_int
  1049.     bsr    resize
  1050. scroll6_:
  1051.     bsr    key_chk
  1052.     bsr    mouse_chk
  1053.     tst.b    esc_flg
  1054.     bne    scroll9
  1055.     tst.b    next_flg
  1056.     bne    scroll9
  1057.     tst.b    resize_flg
  1058.     bne    scroll6_
  1059.  
  1060. scroll7:                *書き戻し
  1061.     bsr    gr_off0
  1062.     bsr    gr_int0
  1063.     bsr    gr_on0
  1064.     bsr    rewrite
  1065.     bra    scroll2
  1066.  
  1067. scroll8:
  1068.     bsr    key_chk            *ESCくらいは入力チェック
  1069.     bsr    mouse_chk        *マウスのキー入力チェック
  1070.  
  1071. scroll9:
  1072.     rts
  1073.  
  1074. *****************************************************************
  1075. *    キー入力チェック                    *
  1076. *****************************************************************
  1077. key_chk:
  1078.     movea.w    #$800,a0
  1079.     btst.b    #1,(a0)            *ESCが押されたか?
  1080.     beq    key_chk_        *押されていない
  1081.     st    esc_flg            *ESCスイッチON
  1082.     bra    key_chk9
  1083.  
  1084. key_chk_:
  1085.     btst.b    #7,1(a0)        *BSが押されたか?
  1086.     beq    key_chk0        *押されていない
  1087.     st    esc_flg            *ESCスイッチON
  1088.     bra    key_chk9
  1089.  
  1090. key_chk0:
  1091.     btst.b    #5,3(a0)        *RETURNが押されたか?
  1092.     beq    key_chk1        *押されていない
  1093.     st    next_flg        *NEXTスイッチON
  1094.     bra    key_chk9
  1095.  
  1096. key_chk1:
  1097.     btst.b    #5,6(a0)        *SPACEが押されたか?
  1098.     beq    key_chk2
  1099.     st    next_flg
  1100.     bra    key_chk9
  1101.  
  1102. key_chk2:
  1103.     btst.b    #6,9(a0)        *ENTERが押されたか?
  1104.     beq    key_chk3
  1105.     st    next_flg
  1106.     bra    key_chk9
  1107.  
  1108. key_chk3:
  1109.     btst.b    #6,6(a0)        *HOMEが押されたか?
  1110.     beq    key_chk4
  1111.     tst.b    inkey_flg1
  1112.     bne    key_chk9
  1113.     st    inkey_flg1
  1114.     bsr    inf_change        *情報表示の変更
  1115.     bra    key_chk9
  1116.  
  1117. key_chk4:
  1118.     btst.b    #2,7(a0)        *UNDOが押されたか?
  1119.     beq    key_chk8
  1120.     tst.b    inkey_flg1
  1121.     bne    key_chk9
  1122.     st    inkey_flg1
  1123.     not.b    resize_flg
  1124.     bra    key_chk9
  1125.  
  1126. key_chk8:
  1127.     sf    inkey_flg1
  1128.  
  1129. key_chk9:
  1130.     rts
  1131.  
  1132. *****************************************************************
  1133. *    カーソル入力チェック                    *
  1134. *****************************************************************
  1135. cursor_chk:
  1136.     movea.w    #$807,a0        *カーソルキーのチェック
  1137.     move.b    (a0),d0
  1138.     ror.b    #3,d0
  1139.     andi.w    #$000f,d0
  1140.     move.b    d0,scroll_key
  1141.     rts
  1142.  
  1143. *****************************************************************
  1144. *    テンキー入力チェック                    *
  1145. *****************************************************************
  1146. tenkey_chk:
  1147.     movea.w    #$808,a0
  1148.     lea.l    scroll_key(pc),a1
  1149.     btst.b    #4,(a0)            *8押されたか?
  1150.     beq    tenkey_chk0        *押されていない
  1151.     or.b    #2,(a1)            *上セット
  1152. tenkey_chk0:
  1153.     btst.b    #7,(a0)            *4が押されたか?
  1154.     beq    tenkey_chk1        *押されていない
  1155.     or.b    #1,(a1)            *右セット
  1156. tenkey_chk1:
  1157.     movea.w    #$809,a0
  1158.     btst.b    #1,(a0)            *6が押されたか?
  1159.     beq    tenkey_chk2        *押されていない
  1160.     or.b    #4,(a1)            *左セット
  1161. tenkey_chk2:
  1162.     btst.b    #4,(a0)            *2が押されたか?
  1163.     beq    tenkey_chk3        *押されていない
  1164.     or.b    #8,(a1)            *下セット
  1165. tenkey_chk3:
  1166.     rts
  1167.  
  1168. *****************************************************************
  1169. *    マウスの入力チェック                    *
  1170. *****************************************************************
  1171. mouse_chk:
  1172.     IOCS    _MS_GETDT        *マウスからのデータをGET
  1173.  
  1174.     cmpi.b    #$ff,d0            *右ボタンが押されたか
  1175.     beq    mouse_right        *押された
  1176.     andi.w    #$ff00,d0        *左ボタンが押されたか
  1177.     bne    mouse_left        *押された
  1178.     sf    inkey_flg2
  1179.     bra    mouse_chk1
  1180.  
  1181. mouse_right:
  1182.     andi.w    #$ff00,d0        *更に左ボタンが押されたか
  1183.     bne    mouse_right1        *押された
  1184.  
  1185.     tst.b    inkey_flg2
  1186.     bne    mouse_right0
  1187.     st    inkey_flg2
  1188.     bsr    inf_change        *情報表示の変更
  1189.  
  1190. mouse_right0:
  1191.     IOCS    _MS_GETDT        *マウスからのデータをGET
  1192.     andi.w    #$ff00,d0        *左ボタンが押されたか
  1193.     beq    mouse_chk1        *押されていない
  1194.  
  1195. mouse_right1:
  1196.     st    esc_flg            *ESCスイッチON
  1197.     bra    mouse_chk1
  1198.  
  1199. mouse_left:
  1200.     st    next_flg        *NEXTスイッチON
  1201.  
  1202. mouse_chk1:
  1203.     swap    d0
  1204.     move.w    d0,d1
  1205.     andi.w    #$ff00,d0        *上位を残す
  1206.     andi.w    #$00ff,d1        *下位を残す
  1207.     ror.w    #8,d0            *
  1208.     lea.l    scroll_key(pc),a1
  1209.  
  1210. ms_xp:                    *X方向の移動量を調べる
  1211.     tst.b    d0            *移動量がプラス方向か?
  1212.     beq    ms_yp            *入力なし
  1213.     blt    ms_xm            *マイナスなら飛ぶ
  1214.  
  1215.     cmp.b    #1,d0
  1216.     bls    ms_yp            *移動量が少なければ無視
  1217.     or.b    #4,(a1)            *右セット
  1218.     bra    ms_yp
  1219. ms_xm:
  1220.     cmp.b    #-1,d0
  1221.     bcc    ms_yp
  1222.     or.b    #1,(a1)            *左セット
  1223. *    bra    ms_yp
  1224.  
  1225. ms_yp:                    *Y方向の移動量を調べる
  1226.     tst.b    d1            *移動量がプラス方向か?
  1227.     beq    mouse_chk9        *入力なし
  1228.     blt    ms_ym            *マイナスなら飛ぶ
  1229.  
  1230.     cmp.b    #1,d1
  1231.     bls    mouse_chk9        *移動量が少なければ無視
  1232.     or.b    #8,(a1)            *下セット
  1233.     bra    mouse_chk9
  1234. ms_ym:
  1235.     cmp.b    #-1,d1
  1236.     bcc    mouse_chk9
  1237.     or.b    #2,(a1)            *上セット
  1238. *    bra    mouse_chk9
  1239. mouse_chk9:
  1240.     rts
  1241.  
  1242. *****************************************************************
  1243. *    下方向へ全画面スクロールを行う                *
  1244. *****************************************************************
  1245. down_demo:
  1246.     tst.w    y_max
  1247.     beq    down_demo9
  1248.  
  1249. down_demo1:
  1250.     move.w    s_dot24(pc),-(sp)
  1251.     move.w    #1,s_dot24
  1252. down_demo2:
  1253.     bsr    key_chk
  1254.     bsr    mouse_chk
  1255.     tst.b    esc_flg
  1256.     bne    down_demo8
  1257.     tst.b    next_flg
  1258.     bne    down_demo8
  1259.  
  1260.     bsr    demo_conv
  1261. *    bsr    v_wait
  1262.     bsr    down
  1263.     cmp.w    y_max(pc),d3
  1264.     bne    down_demo2
  1265. down_demo8:
  1266.     move.w    (sp)+,s_dot24
  1267.  
  1268. down_demo9:
  1269.     rts
  1270.  
  1271. demo_conv:                *分割コンバート
  1272.     movem.l    d0-d7/a0-a6,-(sp)
  1273.     move.w    d3,d0
  1274.     add.w    #512,d0
  1275.  
  1276.     move.w    y_max(pc),d1
  1277.     sub.w    d3,d1
  1278.     cmp.w    s_dot24(pc),d1
  1279.     bls    demo_conv_
  1280.     move.w    s_dot24(pc),d1
  1281. demo_conv_:
  1282.     bsr    conv24
  1283.     movem.l    (sp)+,d0-d7/a0-a6
  1284.     rts
  1285.  
  1286. *****************************************************************
  1287. *    右方向へ全画面スクロールを行う                *
  1288. *****************************************************************
  1289. right_demo:
  1290.     tst.w    x_max
  1291.     beq    right_demo9
  1292.     tst.w    d3
  1293.     bne    right_demo9
  1294. *    move.w    y_max(pc),d0
  1295. *    cmp.w    x_max(pc),d0
  1296. *    bhi    right_demo9
  1297.  
  1298.     move.w    s_dot24(pc),-(sp)
  1299.     lsr.w    s_dot24
  1300. right_demo0:
  1301.     bsr    key_chk
  1302.     bsr    cursor_chk
  1303.     bsr    tenkey_chk
  1304.     bsr    mouse_chk
  1305.     tst.b    scroll_key
  1306.     bne    right_demo8
  1307.     tst.b    esc_flg
  1308.     bne    right_demo8
  1309.     tst.b    next_flg
  1310.     bne    right_demo8
  1311.  
  1312.     bsr    v_wait
  1313.     bsr    right
  1314.     cmp.w    x_max(pc),d2
  1315.     bne    right_demo0
  1316. right_demo8:
  1317.     move.w    (sp)+,s_dot24
  1318. right_demo9:
  1319.     rts
  1320.  
  1321. *****************************************************************
  1322. *    スクロール                        *
  1323. *****************************************************************
  1324. go_scroll:
  1325.     moveq.l    #0,d0
  1326.     move.b    scroll_key(pc),d0
  1327.     add.w    d0,d0
  1328.     add.w    d0,d0
  1329.     movea.l    scroll_tbl(pc,d0.w),a0
  1330.     jsr    (a0)
  1331.     rts
  1332.  
  1333. scroll_tbl:
  1334.     .dc.l    null            *0000    入力無し
  1335.     .dc.l    left            *0001    左
  1336.     .dc.l    up            *0010    上
  1337.     .dc.l    left_up            *0011    上左
  1338.     .dc.l    right            *0100    右
  1339.     .dc.l    null            *0101    右左
  1340.     .dc.l    right_up        *0110    右上
  1341.     .dc.l    up            *0111    右上左
  1342.     .dc.l    down            *1000    下
  1343.     .dc.l    left_down        *1001    下左
  1344.     .dc.l    null            *1010    下上
  1345.     .dc.l    left            *1011    下上左
  1346.     .dc.l    right_down        *1100    下右
  1347.     .dc.l    down            *1101    下右左
  1348.     .dc.l    right            *1110    下右上
  1349.     .dc.l    null            *1111    下右上左
  1350.     .even
  1351.  
  1352. *****************************************************************
  1353. *    入力無し                        *
  1354. *****************************************************************
  1355. null:
  1356.     rts
  1357.  
  1358. *****************************************************************
  1359. *    右下(手抜き)                        *
  1360. *****************************************************************
  1361. right_down:
  1362.     bsr    right
  1363.     bsr    down
  1364.     rts
  1365.  
  1366. *****************************************************************
  1367. *    左下(手抜き)                        *
  1368. *****************************************************************
  1369. left_down:
  1370.     bsr    left
  1371.     bsr    down
  1372.     rts
  1373.  
  1374. *****************************************************************
  1375. *    右上(手抜き)                        *
  1376. *****************************************************************
  1377. right_up:
  1378.     bsr    right
  1379.     bsr    up
  1380.     rts
  1381.  
  1382. *****************************************************************
  1383. *    左上(手抜き)                        *
  1384. *****************************************************************
  1385. left_up:
  1386.     bsr    left
  1387.     bsr    up
  1388.     rts
  1389.  
  1390. *****************************************************************
  1391. *    左へ                            *
  1392. *****************************************************************
  1393. left:
  1394.     sub.w    s_dot24(pc),d2
  1395.     tst.w    d2
  1396.     bpl    left1
  1397.     clr.w    d2
  1398. left1:
  1399.     bsr    x_set
  1400.  
  1401.     move.w    x_old(pc),d5        *何ドットずらすか
  1402.     sub.w    d2,d5
  1403.     beq    left9
  1404.  
  1405.     move.w    d2,d0            *表示開始X座標
  1406.     add.w    x_pos(pc),d0
  1407.     and.w    #$1ff,d0
  1408.     move.w    d0,gram_x
  1409.  
  1410.     move.w    y_old(pc),d0        *表示開始Y座標
  1411.     add.w    y_pos(pc),d0
  1412.     and.w    #$1ff,d0
  1413.     move.w    d0,gram_y
  1414.  
  1415.     move.w    d2,rgb_x
  1416.     move.w    d5,rgb_xd
  1417.     move.w    y_old(pc),rgb_y
  1418.     move.w    y_line(pc),rgb_yd
  1419.  
  1420.     bsr    get_glx_addr        *表示
  1421.     bsr    get_gram_addr
  1422.     bsr    g24
  1423.  
  1424.     move.w    d2,x_old
  1425. left9:
  1426.     rts
  1427.  
  1428. *****************************************************************
  1429. *    上へ                            *
  1430. *****************************************************************
  1431. up:
  1432.     sub.w    s_dot24(pc),d3
  1433.     tst.w    d3
  1434.     bpl    up1
  1435.     clr.w    d3
  1436. up1:
  1437.     move.w    y_old(pc),d6        *何ドットずらすか
  1438.     sub.w    d3,d6
  1439.     beq    up9
  1440.  
  1441.     move.w    x_old(pc),d0        *表示開始X座標
  1442.     add.w    x_pos(pc),d0
  1443.     and.w    #$1ff,d0
  1444.     move.w    d0,gram_x
  1445.  
  1446.     move.w    d3,d0            *表示開始Y座標
  1447.     add.w    y_pos(pc),d0
  1448.     and.w    #$1ff,d0
  1449.     move.w    d0,gram_y
  1450.  
  1451.     move.w    x_old(pc),rgb_x
  1452.     move.w    x_line(pc),rgb_xd
  1453.     move.w    d3,rgb_y
  1454.     move.w    d6,rgb_yd
  1455.  
  1456.     bsr    get_glx_addr
  1457.     bsr    get_gram_addr
  1458.     bsr    g24
  1459.  
  1460.     bsr    y_set
  1461.  
  1462.     move.w    d3,y_old
  1463. up9:
  1464.     rts
  1465.  
  1466. *****************************************************************
  1467. *    右へ                            *
  1468. *****************************************************************
  1469. right:
  1470.     add.w    s_dot24(pc),d2
  1471.     cmp.w    x_max(pc),d2
  1472.     bls    right1
  1473.     move.w    x_max(pc),d2
  1474. right1:
  1475.     bsr    x_set
  1476.  
  1477.     move.w    d2,d5            *何ドットずらすか
  1478.     sub.w    x_old(pc),d5
  1479.     beq    right9
  1480.  
  1481.     move.w    x_old(pc),d0        *表示開始X座標
  1482.     add.w    x_pos(pc),d0
  1483.     add.w    #512,d0
  1484.     and.w    #$1ff,d0
  1485.     move.w    d0,gram_x
  1486.  
  1487.     move.w    y_old(pc),d0        *表示開始Y座標
  1488.     add.w    y_pos(pc),d0
  1489.     and.w    #$1ff,d0
  1490.     move.w    d0,gram_y
  1491.  
  1492.     move.w    x_old(pc),rgb_x
  1493.     add.w    #512,rgb_x
  1494.     move.w    d5,rgb_xd
  1495.     move.w    y_old(pc),rgb_y
  1496.     move.w    y_line(pc),rgb_yd
  1497.  
  1498.     bsr    get_glx_addr        *表示
  1499.     bsr    get_gram_addr
  1500.     bsr    g24
  1501.  
  1502.     move.w    d2,x_old
  1503. right9:
  1504.     rts
  1505.  
  1506. *****************************************************************
  1507. *    下へ                            *
  1508. *****************************************************************
  1509. down:
  1510.     add.w    s_dot24(pc),d3
  1511.     cmp.w    y_max(pc),d3
  1512.     bls    down1
  1513.     move.w    y_max(pc),d3
  1514. down1:
  1515.     bsr    y_set
  1516.  
  1517.     move.w    d3,d6            *何ドットずらすか
  1518.     sub.w    y_old(pc),d6
  1519.     beq    down9
  1520.  
  1521.     move.w    x_old(pc),d0        *表示開始X座標
  1522.     add.w    x_pos(pc),d0
  1523.     and.w    #$1ff,d0
  1524.     move.w    d0,gram_x
  1525.  
  1526.     move.w    y_old(pc),d0        *表示開始Y座標
  1527.     add.w    y_pos(pc),d0
  1528.     and.w    #$1ff,d0
  1529.     move.w    d0,gram_y
  1530.  
  1531.     move.w    x_old(pc),rgb_x
  1532.     move.w    x_line(pc),rgb_xd
  1533.     move.w    y_old(pc),rgb_y
  1534.     add.w    #512,rgb_y
  1535.     move.w    d6,rgb_yd
  1536.  
  1537.     bsr    get_glx_addr        *表示
  1538.     bsr    get_gram_addr
  1539.     bsr    g24
  1540.  
  1541.     move.w    d3,y_old
  1542. down9:
  1543.     rts
  1544.  
  1545. *****************************************************************
  1546. *    終了時に画面を描き直す                    *
  1547. *****************************************************************
  1548. rw_chk:
  1549.     tst.b    rflg
  1550.     beq    rw_end
  1551.     tst.b    skip_flg
  1552.     bne    rw_end
  1553.     tst.b    resize_flg
  1554.     bne    rw_end
  1555.  
  1556.     move.w    d2,d0
  1557.     add.w    d3,d0
  1558.     beq    rw_end
  1559.  
  1560.     bsr    quit_rewrite
  1561. rw_end:
  1562.     rts
  1563.  
  1564. *****************************************************************
  1565. *    一画面表示                        *
  1566. *****************************************************************
  1567. resize:
  1568.     bsr    parm_set
  1569.     pea.l    arg_ptr(pc)
  1570.     bsr    _Gxput
  1571.     addq.l    #4,sp
  1572.     rts
  1573.  
  1574. parm_set:
  1575.     lea.l    arg_ptr(pc),a0
  1576.  
  1577.     bsr    resize_get
  1578.     move.w    d0,4(a0)
  1579.     move.w    d1,6(a0)
  1580.  
  1581.     clr.w    gram_x
  1582.     clr.w    gram_y
  1583.  
  1584.     move.w    #512,d2            *X方向のセンタリング
  1585.     sub.w    d0,d2
  1586.     bmi    parm_set0
  1587.     lsr.w    #1,d2
  1588.     move.w    d2,gram_x
  1589. parm_set0:
  1590.     move.w    #512,d3            *Y方向
  1591.     sub.w    d1,d3
  1592.     bmi    parm_set1
  1593.     lsr.w    #1,d3
  1594.     move.w    d3,gram_y
  1595. parm_set1:
  1596.     bsr    get_gram_addr
  1597.     move.l    a2,(a0)
  1598.     addq.l    #8,a0
  1599.  
  1600.     clr.w    rgb_x
  1601.     clr.w    rgb_y
  1602.     bsr    get_glx_addr
  1603.     move.l    a1,(a0)+
  1604.  
  1605.     move.w    yoko(pc),(a0)+
  1606.     move.w    tate(pc),(a0)+
  1607.  
  1608.     move.w    line_byte2(pc),(a0)+
  1609.  
  1610.     lea.l    work_tbl(pc),a1
  1611.     move.l    a1,(a0)+
  1612.     rts
  1613.  
  1614. resize_get:
  1615.     move.w    tate(pc),d0        *縦サイズと横サイズを比べる
  1616.     cmp.w    yoko(pc),d0
  1617.     beq    resize_get2
  1618.     bhi    resize_get1
  1619.  
  1620. resize_get0:
  1621.     move.w    #512,d0            *横の方が大きい
  1622.     move.w    tate(pc),d1
  1623.     mulu.w    #512,d1
  1624.     divu.w    yoko(pc),d1
  1625.     rts
  1626.  
  1627. resize_get1:
  1628.     move.w    yoko(pc),d0        *縦の方が大きい
  1629.     mulu.w    #512,d0
  1630.     divu.w    tate(pc),d0
  1631.     move.w    #512,d1
  1632.     rts
  1633.  
  1634. resize_get2:
  1635.     move.w    #512,d0            *同じ
  1636.     move.w    #512,d1
  1637.     rts
  1638.  
  1639. *****************************************************************
  1640. *    一画面表示後の描き戻し                    *
  1641. *****************************************************************
  1642. rewrite:
  1643.     move.w    x_old(pc),d2
  1644.     move.w    y_old(pc),d3
  1645.  
  1646.     move.w    d2,d0            *表示開始X座標
  1647.     add.w    x_pos(pc),d0
  1648.     and.w    #$1ff,d0
  1649.     move.w    d0,gram_x
  1650.  
  1651.     move.w    d3,d0            *表示開始Y座標
  1652.     add.w    y_pos(pc),d0
  1653.     and.w    #$1ff,d0
  1654.     move.w    d0,gram_y
  1655.  
  1656.     move.w    d2,rgb_x
  1657.     move.w    x_line(pc),rgb_xd
  1658.     move.w    d3,rgb_y
  1659.     move.w    y_line(pc),rgb_yd
  1660.  
  1661.     bsr    get_glx_addr        *表示
  1662.     bsr    get_gram_addr
  1663.     bsr    x_set
  1664.     bsr    y_set
  1665.     bsr    g24
  1666.     rts
  1667.  
  1668. *****************************************************************
  1669. *    終了時の描き戻し                    *
  1670. *****************************************************************
  1671. quit_rewrite:
  1672.     move.w    x_pos(pc),gram_x    *表示開始X座標
  1673.     move.w    y_pos(pc),gram_y    *表示開始Y座標
  1674.  
  1675.     move.w    d2,rgb_x
  1676.     move.w    x_line(pc),rgb_xd
  1677.     move.w    d3,rgb_y
  1678.     move.w    y_line(pc),rgb_yd
  1679.  
  1680.     clr.w    d2
  1681.     clr.w    d3
  1682.  
  1683.     bsr    get_glx_addr        *表示
  1684.     bsr    get_gram_addr
  1685.     bsr    x_set
  1686.     bsr    y_set
  1687.     bsr    g24
  1688.     rts
  1689.  
  1690. *****************************************************************
  1691. *    スクロール分のグラフィックを表示する            *
  1692. *    gram_x, gram_y  表示先座標(GRAM)            *
  1693. *    rgb_x,  rgb_y   表示元座標(RGB)                *
  1694. *    rgb_xd, rgb_yd  ドット数                *
  1695. *****************************************************************
  1696. g24:
  1697.     movem.l    d5-d6,-(sp)
  1698.     move.w    rgb_xd(pc),d0        *横ドット数
  1699.     move.w    rgb_yd(pc),d7        *縦ドット数
  1700.  
  1701.     moveq.l    #0,d4            *次のラインへのバイト数
  1702.     move.w    line_byte2(pc),d4    *(転送元)
  1703.     sub.w    d0,d4
  1704.     sub.w    d0,d4
  1705.  
  1706.     moveq.l    #0,d5            *表示データの1ライン下までの差分
  1707.     move.w    #512,d5            *(表示先)
  1708.     sub.w    d0,d5
  1709.     add.w    d5,d5
  1710.  
  1711.     move.w    gram_x(pc),d6
  1712.     add.w    rgb_xd(pc),d6
  1713.     cmp.w    #512,d6
  1714.     bhi    g24_2            *左右2回に分けて表示
  1715.  
  1716.     cmp.w    #1,d0            *表示ライン=横1ドット
  1717.     beq    g24_1
  1718.  
  1719.     cmp.w    #8,d0            *表示ライン=横8ドット
  1720.     beq    g24_8
  1721.  
  1722.     btst.l    #0,d0
  1723.     beq    g24_g            *表示ライン=偶数
  1724.     bra    g24_k            *表示ライン=奇数
  1725.  
  1726. g24_1:
  1727.     subq.w    #1,d7            *dbraのため縦-1
  1728. g24_11:
  1729.     move.w    (a1)+,(a2)+
  1730.     adda.l    d4,a1            *変換元アドレス更新
  1731.     adda.l    d5,a2            *表示先アドレス更新
  1732.     cmpa.l    a3,a2
  1733.     bcs    g24_13
  1734.     suba.l    #GRAM_MAX-GRAM,a2
  1735. g24_13:
  1736.     dbra    d7,g24_11
  1737.     bra    g24_end
  1738.  
  1739. g24_8:
  1740.     subq.w    #1,d7            *dbraのため縦-1
  1741. g24_81:
  1742.     move.l    (a1)+,(a2)+
  1743.     move.l    (a1)+,(a2)+
  1744.     move.l    (a1)+,(a2)+
  1745.     move.l    (a1)+,(a2)+
  1746.     adda.l    d4,a1            *変換元アドレス更新
  1747.     adda.l    d5,a2            *表示先アドレス更新
  1748.     cmpa.l    a3,a2
  1749.     bcs    g24_83
  1750.     suba.l    #GRAM_MAX-GRAM,a2
  1751. g24_83:
  1752.     dbra    d7,g24_81
  1753.     bra    g24_end
  1754.  
  1755. g24_g:
  1756.     lsr.w    #1,d0            *1/2
  1757.     subq.w    #1,d0            *dbraのため-1
  1758.     subq.w    #1,d7            *dbraのため-1
  1759. g24_g1:
  1760.     move.w    d0,d1
  1761. g24_g2:
  1762.     move.l    (a1)+,(a2)+
  1763.     dbra    d1,g24_g2
  1764.     adda.l    d4,a1            *変換元アドレス更新
  1765.     adda.l    d5,a2            *表示先アドレス更新
  1766.     cmpa.l    a3,a2
  1767.     bcs    g24_g3
  1768.     suba.l    #GRAM_MAX-GRAM,a2
  1769. g24_g3:
  1770.     dbra    d7,g24_g1
  1771.     bra    g24_end
  1772.  
  1773. g24_k:
  1774.     lsr.w    #1,d0            *1/2
  1775.     subq.w    #1,d0            *dbraのため-1
  1776.     subq.w    #1,d7            *dbraのため-1
  1777. g24_k1:
  1778.     move.w    d0,d1
  1779. g24_k2:
  1780.     move.l    (a1)+,(a2)+
  1781.     dbra    d1,g24_k2
  1782.     move.w    (a1)+,(a2)+
  1783.     adda.l    d4,a1            *変換元アドレス更新
  1784.     adda.l    d5,a2            *表示先アドレス更新
  1785.     cmpa.l    a3,a2
  1786.     bcs    g24_k3
  1787.     suba.l    #GRAM_MAX-GRAM,a2
  1788. g24_k3:
  1789.     dbra    d7,g24_k1
  1790.     bra    g24_end
  1791.  
  1792. g24_2:                    *左右2回に分けて表示
  1793.     add.w    #1024,d5        *1ライン下までの差分を補正
  1794.  
  1795.     move.w    #512,d0            *横ドット1
  1796.     sub.w    gram_x(pc),d0
  1797.     move.w    rgb_xd(pc),d6        *横ドット2
  1798.     sub.w    d0,d6
  1799.  
  1800.     subq.w    #1,d0            *dbraのため-1
  1801.     subq.w    #1,d6            *dbraのため-1
  1802.     subq.w    #1,d7            *dbraのため-1
  1803. g24_21:
  1804.     move.w    d0,d1            *右側
  1805. g24_22:
  1806.     move.w    (a1)+,(a2)+
  1807.     dbra    d1,g24_22
  1808. g24_23:
  1809.     move.w    d6,d1            *左側
  1810.     lea.l    -1024(a2),a2
  1811. g24_24:
  1812.     move.w    (a1)+,(a2)+
  1813.     dbra    d1,g24_24
  1814.  
  1815.     adda.l    d4,a1            *変換元アドレス更新
  1816.     adda.l    d5,a2            *表示先アドレス更新
  1817.     cmpa.l    a3,a2
  1818.     bcs    g24_25
  1819.     suba.l    #GRAM_MAX-GRAM,a2
  1820. g24_25:
  1821.     dbra    d7,g24_21
  1822.  
  1823. g24_end:
  1824.     movem.l    (sp)+,d5-d6
  1825.     rts
  1826.  
  1827. *****************************************************************
  1828. *    RGBデータのアドレスを取得(a1)                *
  1829. *****************************************************************
  1830. get_rgb_addr:
  1831.     move.w    line_byte1(pc),d0    *line_byte1*rgb_y + gr_addr + rgb_x*2
  1832.     mulu.w    rgb_y(pc),d0
  1833.     add.l    gr_addr(pc),d0
  1834.     movea.l    d0,a1
  1835.     moveq.l    #0,d0
  1836.     move.w    rgb_x(pc),d0
  1837.     add.w    d0,d0
  1838.     adda.l    d0,a1
  1839.     rts
  1840.  
  1841. *****************************************************************
  1842. *    GLXデータのアドレスを取得(a1)                *
  1843. *****************************************************************
  1844. get_glx_addr:
  1845.     move.w    line_byte2(pc),d0    *line_byte2*rgb_y + gr_addr + rgb_x*2
  1846.     mulu.w    rgb_y(pc),d0
  1847.     add.l    gr_addr(pc),d0
  1848.     movea.l    d0,a1
  1849.     moveq.l    #0,d0
  1850.     move.w    rgb_x(pc),d0
  1851.     add.w    d0,d0
  1852.     adda.l    d0,a1
  1853.     rts
  1854.  
  1855. *****************************************************************
  1856. *    GRAMのアドレスを取得(a2)                *
  1857. *****************************************************************
  1858. get_gram_addr:
  1859.     move.w    gram_x(pc),d0        *表示先画像アドレス
  1860.     move.w    gram_y(pc),d1
  1861.     swap.w    d1
  1862.     clr.w    d1
  1863.     ror.l    #6,d1
  1864.     add.w    d0,d0
  1865.     add.w    d0,d1
  1866.     movea.l    d1,a2
  1867.     adda.l    #GRAM,a2
  1868.  
  1869.     movea.l    #GRAM_MAX,a3        *GRAM_MAX
  1870.     rts
  1871.  
  1872. *****************************************************************
  1873. *    CRTCの値を設定する                    *
  1874. *****************************************************************
  1875. crtc_set:
  1876.     lea.l    crtc_tbl(pc),a0
  1877.     move.w    crt_mode(pc),d0
  1878.     add.w    d0,d0
  1879.     add.w    d0,d0
  1880.     move.l    0(a0,d0.w),a0
  1881.  
  1882.     tst.w    (a0)+            *HRL=0?
  1883.     beq    crtc_set0
  1884.     or.b    #%0010,$e8e007        *HRLビットを立てる
  1885.     bra    crtc_set1
  1886. crtc_set0:
  1887.     bclr.b    #1,$e8e007        *HRLビットを消す
  1888. crtc_set1:
  1889.     movea.l    #$e80000,a1
  1890.     move.w    (a0)+,$28(a1)        *crtc r20
  1891.  
  1892.     move.l    (a0)+,(a1)+        *crtc r00-r08
  1893.     move.l    (a0)+,(a1)+
  1894.     move.l    (a0)+,(a1)+
  1895.     move.l    (a0)+,(a1)+
  1896.     move.w    (a0),(a1)
  1897.     rts
  1898.  
  1899. *****************************************************************
  1900. *    情報の表示/非表示の変更を行う                *
  1901. *****************************************************************
  1902. inf_change:
  1903.     add.b    #1,prt_flg
  1904.     cmp.b    #2,prt_flg
  1905.     bcs    inf_change1
  1906.     beq    inf_change2
  1907.     bra    inf_change0
  1908.  
  1909. inf_change0:
  1910.     bsr    inf_off            *情報消去
  1911.     bsr    tone_up
  1912.     clr.b    prt_flg
  1913.     bra    inf_change9
  1914. inf_change1:
  1915.     bsr    inf_prt            *情報表示
  1916.     bra    inf_change9
  1917. inf_change2:
  1918.     bsr    tone_down
  1919. inf_change9:
  1920.     rts
  1921.  
  1922. inf_mode:
  1923.     cmp.b    #1,prt_flg
  1924.     bcs    inf_mode9
  1925.     beq    inf_mode1
  1926.     bra    inf_mode2
  1927. inf_mode1:
  1928.     bsr    inf_prt            *情報表示
  1929.     bra    inf_mode9
  1930. inf_mode2:
  1931.     bsr    inf_prt            *情報表示
  1932.     bsr    tone_down
  1933. inf_mode9:
  1934.     rts
  1935.  
  1936. *****************************************************************
  1937. *    情報の表示                        *
  1938. *****************************************************************
  1939. inf_prt:
  1940.     tst.b    prt_flg
  1941.     beq    inf_prt9        *ゼロなら表示しない
  1942.  
  1943.     bsr    v_wait
  1944.     bsr    inf_off
  1945.     bsr    name_prt        *ファイル名の表示
  1946.     bsr    size_prt        *サイズの表示
  1947. *    bsr    col_prt            *色数の表示
  1948. inf_prt9:
  1949.     rts
  1950.  
  1951. *****************************************************************
  1952. *    ファイル名の表示                    *
  1953. *****************************************************************
  1954. name_prt:
  1955.     lea.l    prt_buf(pc),a0        *表示バッファの先頭アドレス
  1956.     lea.l    inf1(pc),a1        *'ファイル名:'をコピー
  1957.     bsr    strcpy
  1958.  
  1959.     lea.l    filbuf(pc),a1        *ファイル名をコピーする
  1960.     lea.l    30(a1),a1        *
  1961.     bsr    strcpy
  1962.  
  1963.     lea.l    crlf_mes(pc),a1        *改行コードをコピー
  1964.     bsr    strcpy
  1965.  
  1966.     lea.l    prt_buf(pc),a1
  1967.     IOCS    _B_PRINT        *ファイル名を表示
  1968.     rts
  1969.  
  1970. *****************************************************************
  1971. *    画像サイズの表示                    *
  1972. *****************************************************************
  1973. size_prt:
  1974.     lea.l    prt_buf(pc),a0        *コピー先
  1975.     lea.l    inf2(pc),a1        *'画像サイズ:'をコピー
  1976.     bsr    strcpy
  1977.  
  1978.     movea.l    a0,a2
  1979.     moveq.l    #0,d0            *横サイズ
  1980.     move.w    yoko(pc),d0
  1981.     bsr    suji_set
  1982.     move.b    #'x',(a2)+        *'x'
  1983.  
  1984.     moveq.l    #0,d0            *縦サイズ
  1985.     move.w    tate(pc),d0
  1986.     bsr    suji_set
  1987.  
  1988.     movea.l    a2,a0
  1989.     lea.l    crlf_mes(pc),a1        *改行コードをコピー
  1990.     bsr    strcpy
  1991.  
  1992.     lea.l    prt_buf(pc),a1
  1993.     IOCS    _B_PRINT        *画像サイズを表示
  1994.     rts
  1995.  
  1996. *****************************************************************
  1997. *    階調のUP・DOWN                        *
  1998. *****************************************************************
  1999. tone_up:
  2000.     andi.w    #$00ff,$e82600        *半輝度オフ
  2001.     rts
  2002.  
  2003. tone_down:
  2004.     ori.w    #$1b00,$e82600        *半輝度オン(参考:JPEGED.R)
  2005.     rts
  2006.  
  2007. *****************************************************************
  2008. *    数字の設定                        *
  2009. *****************************************************************
  2010. suji_set:
  2011.     lea.l    num_buf(pc),a0
  2012.     move.b    #0,11(a0)        *終了位置
  2013.     bsr    bin2dec
  2014.     bsr    zero_keshi
  2015. suji_set1:
  2016.     move.b    (a0)+,(a2)+
  2017.     bne    suji_set1
  2018.     subq.l    #1,a2
  2019.     rts
  2020.  
  2021. *****************************************************************
  2022. *    2進=>10進                        *
  2023. *    d0 変換元の数値 a0 変換後の格納アドレス            *
  2024. *****************************************************************
  2025. bin2dec:
  2026.     movem.l    d0-d3/a0-a1,-(sp)
  2027.     moveq.l    #10-1,d1
  2028.     lea.l    exp_tbl(pc),a1
  2029. bin2dec0:
  2030.     clr.b    d2
  2031.     move.l    (a1)+,d3
  2032. bin2dec1:
  2033.     or    d3,d3
  2034.     sub.l    d3,d0
  2035.     bcs    bin2dec2
  2036.     addq.b    #1,d2
  2037.     bra    bin2dec1
  2038. bin2dec2:
  2039.     add.l    d3,d0
  2040.     add.b    #'0',d2
  2041.     move.b    d2,(a0)+
  2042.     dbra    d1,bin2dec0
  2043.     movem.l    (sp)+,d0-d3/a0-a1
  2044.     rts
  2045.  
  2046. exp_tbl:
  2047.     .dc.l    1000000000
  2048.     .dc.l    100000000
  2049.     .dc.l    10000000
  2050.     .dc.l    1000000
  2051.     .dc.l    100000
  2052.     .dc.l    10000
  2053.     .dc.l    1000
  2054.     .dc.l    100
  2055.     .dc.l    10
  2056.     .dc.l    1
  2057.  
  2058. *****************************************************************
  2059. *    頭にある'0'を消す                    *
  2060. *****************************************************************
  2061. zero_keshi:
  2062.     lea.l    num_buf(pc),a0
  2063.     move.w    #9-1,d0            *最期の'0'は残す
  2064. zero_keshi0:
  2065.     cmp.b    #'0',(a0)
  2066.     bne    zero_keshi9
  2067.     move.b    #SPACE,(a0)+
  2068. zero_keshi1:
  2069.     dbra    d0,zero_keshi0
  2070. zero_keshi9:
  2071.     rts
  2072.  
  2073. *****************************************************************
  2074. *    情報の消去                        *
  2075. *****************************************************************
  2076. inf_off:
  2077.     move.w    #$1a,d1            *TEXTクリア&HOMEポジションへ
  2078.     IOCS    _B_PUTC
  2079.     rts
  2080.  
  2081. *****************************************************************
  2082. *    スクロールX座標セット                    *
  2083. *****************************************************************
  2084. x_set:
  2085.     movea.l    #$e80000,a0
  2086.     move.w    d2,crtc_r12(a0)
  2087.     move.w    d2,crtc_r14(a0)
  2088.     move.w    d2,crtc_r16(a0)
  2089.     move.w    d2,crtc_r18(a0)
  2090.     rts
  2091.  
  2092. *****************************************************************
  2093. *    スクロールY座標セット                    *
  2094. *****************************************************************
  2095. y_set:
  2096.     movea.l    #$e80000,a0
  2097.     move.w    d3,crtc_r13(a0)        *スクリーン0のY座標
  2098.     move.w    d3,crtc_r15(a0)        *スクリーン1のY座標
  2099.     move.w    d3,crtc_r17(a0)        *スクリーン2のY座標
  2100.     move.w    d3,crtc_r19(a0)        *スクリーン3のY座標
  2101.     rts
  2102.  
  2103. *****************************************************************
  2104. *    画面の動機待ち                        *
  2105. *****************************************************************
  2106. v_wait:
  2107.     movea.l    #$e88001,a0
  2108.     moveq.l    #4,d0
  2109. v_wait0:
  2110.     btst.b    d0,(a0)
  2111.     beq    v_wait0
  2112. v_wait1:
  2113.     btst.b    d0,(a0)
  2114.     bne    v_wait1
  2115.     rts
  2116.  
  2117. *****************************************************************
  2118. *    テキスト画面の消去                    *
  2119. *****************************************************************
  2120. text_clr:
  2121.     movem.l    d0-d3/a3,-(sp)
  2122.     move.w    $E8002A,d0
  2123.     move.w    #%0000_0001_1111_0000,$E8002A
  2124.     movea.l    #TEXT1,a3
  2125.     move.w    #1024-1,d1
  2126. text_clr_lp:
  2127.     clr.l    (a3)+
  2128.     dbra.w    d1,text_clr_lp
  2129.     move.w    d0,$E8002A
  2130.  
  2131.     move.w    #$0001,d1
  2132.     move.w    #255,d2
  2133.     move.w    #$000F,d3
  2134.     IOCS    _TXRASCPY
  2135.     movem.l    (sp)+,d0-d3/a3
  2136.     rts
  2137.  
  2138. *****************************************************************
  2139. *    カーソル消す                        *
  2140. *****************************************************************
  2141. cursol_clr:
  2142.     move.b    $992.w,cur_save
  2143.     beq    cursol_clr9
  2144.     IOCS    _OS_CUROF
  2145.  
  2146. cursol_clr9:
  2147.     rts
  2148.  
  2149. *****************************************************************
  2150. *    カーソル戻す                        *
  2151. *****************************************************************
  2152. cursol_recv:
  2153.     tst.b    cur_save
  2154.     beq    cursol_recv9
  2155.     IOCS    _OS_CURON
  2156.  
  2157. cursol_recv9:
  2158.     rts
  2159.  
  2160. *****************************************************************
  2161. *    ファイルのOPENを行う                *
  2162. *****************************************************************
  2163. file_open:
  2164.     move.w    #0,-(sp)        *ファイルopen
  2165.     move.l    a0,-(sp)
  2166.     DOS    _OPEN
  2167.     addq.l    #6,sp
  2168.     tst.l    d0            *OK?
  2169.     bmi    open_err
  2170.     move.l    d0,d7            *ファイルハンドルセーブ
  2171.     rts
  2172.  
  2173. *****************************************************************
  2174. *    ファイルのサイズを求める(d6に返す)            *
  2175. *****************************************************************
  2176. file_size:
  2177.     move.w    #2,-(sp)
  2178.     move.l    #0,-(sp)
  2179.     move.w    d7,-(sp)
  2180.     DOS    _SEEK
  2181.     addq.l    #8,sp
  2182.     tst.l    d0            *OK?
  2183.     bmi    read_err
  2184.  
  2185.     move.l    d0,d6
  2186.  
  2187.     move.w    #0,-(sp)
  2188.     move.l    #0,-(sp)
  2189.     move.w    d7,-(sp)
  2190.     DOS    _SEEK
  2191.     addq.l    #8,sp
  2192.     tst.l    d0            *OK?
  2193.     bmi    read_err
  2194.     rts
  2195.  
  2196. *****************************************************************
  2197. *    ディスクからデータの読み込みを行う            *
  2198. *****************************************************************
  2199. file_read:
  2200.     move.l    d6,-(sp)        *データサイズ
  2201.     move.l    a4,-(sp)        *バッファアドレス
  2202.     move.w    d7,-(sp)        *ファイルハンドル
  2203.     DOS    _READ
  2204.     lea    10(sp),sp        *スタック補正
  2205.     tst.l    d0            *OK?
  2206.     bmi    read_err
  2207.     cmp.l    d6,d0            *全部読めたか
  2208.     bne    read_err
  2209.     rts
  2210.  
  2211. *****************************************************************
  2212. *    ファイルをCLOSEする                *
  2213. *****************************************************************
  2214. file_close:
  2215.     move.w    d7,-(sp)        *ファイルCLOSE
  2216.     DOS    _CLOSE
  2217.     addq.l    #2,sp
  2218.     rts
  2219.  
  2220. *****************************************************************
  2221. *    バッファ確保                        *
  2222. *****************************************************************
  2223. buf_get:
  2224.     pea.l    -1.w            *確保出来る最大サイズを取得
  2225.     DOS    _MALLOC
  2226.     addq.l    #4,sp
  2227.     andi.l    #$00ffffff,d0
  2228.     move.l    d0,d1
  2229.     move.l    d0,-(sp)
  2230.     DOS    _MALLOC
  2231.     addq.l    #4,sp
  2232.     tst.l    d0
  2233.     bmi    no_buff1
  2234.  
  2235.     move.l    d0,buff_addr        *バッファアドレス
  2236.     move.l    d1,buff_size        *バッファサイズ
  2237.     rts
  2238.  
  2239. *****************************************************************
  2240. *    バッファ開放                        *
  2241. *****************************************************************
  2242. buf_free:
  2243.     pea.l    buff_addr(pc)        *バッファ開放
  2244.     DOS    _MFREE
  2245.     addq.l    #4,sp
  2246.     rts
  2247.  
  2248. *****************************************************************
  2249. *    スーパーモードにする                    *
  2250. *****************************************************************
  2251. super:
  2252.     clr.l    -(sp)            *スーパーバイザモードへ移行
  2253.     DOS    _SUPER
  2254.     addq.l    #4,sp
  2255.     move.l    d0,sp_save
  2256.     rts
  2257.  
  2258. *****************************************************************
  2259. *    ユーザーモードにする                    *
  2260. *****************************************************************
  2261. user:
  2262.     move.l    sp_save(pc),-(sp)    *ユーザーモードへ
  2263.     DOS    _SUPER
  2264.     addq.l    #4,sp
  2265.     rts
  2266.  
  2267. *****************************************************************
  2268. *    ファンクション表示を消す                *
  2269. *****************************************************************
  2270. func_off:
  2271.     lea.l    func_off_mes(pc),a0
  2272.     bsr    mesput
  2273.     rts
  2274.  
  2275. *****************************************************************
  2276. *    処理したファイル数をチェックする            *
  2277. *****************************************************************
  2278. file_cnt_chk:
  2279.     tst.w    file_cnt        *処理したファイルは0個か
  2280.     bne    file_cnt_chk1        *違う
  2281.     bsr    no_file            *ファイルが無かった
  2282. file_cnt_chk1:
  2283.     rts
  2284.  
  2285. *****************************************************************
  2286. *    処理するファイルがなかった                *
  2287. *****************************************************************
  2288. no_file:
  2289.     lea.l    no_file_mes(pc),a0
  2290.     bsr    mesput
  2291.     rts
  2292.  
  2293. *****************************************************************
  2294. *    ファイル名エラー                    *
  2295. *****************************************************************
  2296. name_er:
  2297.     lea.l    name_er_mes(pc),a0
  2298.     bsr    mesput
  2299.     bra    exit2
  2300.  
  2301. *****************************************************************
  2302. *    メモリ全くない                        *
  2303. *****************************************************************
  2304. no_buff1:
  2305.     lea.l    no_buff_mes1(pc),a0
  2306.     bsr    mesput
  2307.     bra    exit2
  2308.  
  2309. *****************************************************************
  2310. *    メモリが足りない                    *
  2311. *****************************************************************
  2312. no_buff2:
  2313.     lea.l    arg1(pc),a0
  2314.     bsr    mesput
  2315.     lea.l    no_buff_mes2(pc),a0
  2316.     bsr    mesput
  2317.     rts
  2318.  
  2319. *****************************************************************
  2320. *    IPRが見つからない                    *
  2321. *****************************************************************
  2322. ipr_err:
  2323.     lea.l    arg1(pc),a0
  2324.     bsr    mesput
  2325.     lea.l    ipr_er_mes(pc),a0
  2326.     bsr    mesput
  2327.     rts
  2328.  
  2329. *****************************************************************
  2330. *    ロード座標エラー                    *
  2331. *****************************************************************
  2332. but_pos:
  2333.     bsr    file_close        *ファイルクローズ
  2334.     lea.l    arg1(pc),a0
  2335.     bsr    mesput
  2336.     lea.l    but_pos_mes(pc),a0
  2337.     bsr    mesput
  2338.     bra    exit2
  2339.  
  2340. *****************************************************************
  2341. *    ファイルが見付からない                    *
  2342. *****************************************************************
  2343. open_err:
  2344.     lea.l    arg1(pc),a0
  2345.     bsr    mesput
  2346.     lea.l    open_er_mes(pc),a0
  2347.     bsr    mesput
  2348.     bra    exit2
  2349.  
  2350. *****************************************************************
  2351. *    読み込みエラー                        *
  2352. *****************************************************************
  2353. read_err:
  2354.     lea.l    arg1(pc),a0
  2355.     bsr    mesput
  2356.     lea.l    read_er_mes(pc),a0
  2357.     bsr    mesput
  2358.     bra    exit2
  2359.  
  2360. *****************************************************************
  2361. *    使用方表示                        *
  2362. *****************************************************************
  2363. usage:
  2364.     lea.l    usage_mes(pc),a0
  2365.     bsr    mesput
  2366.     bra    exit2
  2367.  
  2368. *****************************************************************
  2369. *    メッセージ表示                        *
  2370. *****************************************************************
  2371. mesput:
  2372. *    move.w    #STDERR,-(sp)        *標準エラー出力へ
  2373.     move.w    #STDOUT,-(sp)        *標準出力へ
  2374.     move.l    a0,-(sp)        *メッセージを
  2375.     DOS    _FPUTS            *出力する
  2376.     addq.l    #6,sp            *スタック補正
  2377.     rts
  2378.  
  2379. *****************************************************************
  2380. *    終了処理                        *
  2381. *****************************************************************
  2382. exit:
  2383.     bsr    cursol_recv        *カーソル戻す
  2384.     IOCS    _MS_INIT        *キーバッファクリア
  2385.     moveq.l    #-1,d1
  2386.     IOCS    _SKEY_MOD
  2387.     move.w    #-1,-(sp)
  2388.     DOS    _KFLUSH
  2389.     addq.l    #2,sp
  2390.     rts
  2391.  
  2392. *****************************************************************
  2393. *    エラー処理2                        *
  2394. *****************************************************************
  2395. exit2:
  2396.     bsr    exit
  2397.     move.w    #1,-(sp)        *終了コード1を持って
  2398.     DOS    _EXIT2            * エラー終了
  2399.  
  2400. *****************************************************************
  2401. *    データエリア                        *
  2402. *****************************************************************
  2403.     .data
  2404.     .even
  2405. usage_mes:
  2406.     .dc.b    '24bit beta RGB Loader V0.04+ by A.MUKAWA',CR,LF
  2407.     .dc.b    '機能:24bitベタのRGBファイルを表示します',CR,LF
  2408.     .dc.b    '用法:LDRGB [スイッチ] ファイル名',CR,LF
  2409.     .dc.b    CR,LF
  2410.     .dc.b    '             /L[x,y]   ロード座標の指定',CR,LF
  2411.     .dc.b    '             /LC       画面中央に表示',CR,LF
  2412.     .dc.b    '             /K        表示後にキー入力待ち',CR,LF
  2413.     .dc.b    '             /Cn       画面クリアモードの設定(n=0~3)',CR,LF
  2414.     .dc.b    '                         0:画面消去を行わない',CR,LF
  2415.     .dc.b    '                         1:テキスト画面のみ消去(DEF)',CR,LF
  2416.     .dc.b    '                         2:グラフィック画面のみ消去',CR,LF
  2417.     .dc.b    '                         3:テキスト画面とグラフィック画面を消去',CR,LF
  2418.     .dc.b    '             /D        マトリクスディザで表示',CR,LF
  2419.     .dc.b    '             /M        MPUに頑張ってもらう',CR,LF
  2420.     .dc.b    '             /R        終了時に画面を描き直す',CR,LF
  2421.     .dc.b    0
  2422. no_file_mes:
  2423.     .dc.b    '表示できるファイルがありません!',CR,LF,0
  2424. name_er_mes:
  2425.     .dc.b    'ファイル名の指定に間違いがあります!',CR,LF,0
  2426. open_er_mes:
  2427.     .dc.b    ' が見つかりません!',CR,LF,0
  2428. read_er_mes:
  2429.     .dc.b    ' の読み込みエラーが発生しました!',CR,LF,0
  2430. no_buff_mes1:
  2431.     .dc.b    'メモリの余裕が全くありません!',CR,LF,0
  2432. no_buff_mes2:
  2433.     .dc.b    ' の表示に必要なメモリがありません!',CR,LF,0
  2434. but_pos_mes:
  2435.     .dc.b    ' は指定した座標にロード出来ません!',CR,LF,0
  2436. ipr_er_mes:
  2437.     .dc.b    ' 用のIPRファイルがありません!',CR,LF,0
  2438. crlf_mes:
  2439.     .dc.b    CR,LF,0
  2440. func_off_mes:
  2441.     .dc.b    $1b,$5b,$3e,$31,$68,0
  2442.  
  2443. dext:
  2444.     .dc.b    '.RGB',0        *補う拡張子
  2445. komekome:
  2446.     .dc.b    '\'
  2447. kome0:
  2448.     .dc.b    '*.RGB',0
  2449.     .even
  2450. cext1:
  2451.     .dc.b    '.IPR',0        *変更する拡張子1
  2452.  
  2453. kflg:    .dcb.b    1,0            */Kスイッチon/offフラグ(=0...off,<>0...on)
  2454. cflg:    .dcb.b    1,0            */Cスイッチon/offフラグ(=0...off,<>0...on)
  2455. lflg:    .dcb.b    1,0            */Lスイッチon/offフラグ(=0...off,<>0...on)
  2456. lcflg:    .dcb.b    1,0            */LCスイッチon/offフラグ(=0...off,<>0...on)
  2457. dflg:    .dcb.b    1,0            */Dスイッチon/offフラグ(=0...off,<>0...on)
  2458. mflg:    .dcb.b    1,0            */Mスイッチon/offフラグ(=0...off,<>0...on)
  2459. rflg:    .dcb.b    1,0            */Rスイッチon/offフラグ(=0...off,<>0...on)
  2460. int_flg:    .dcb.b    1,0        *
  2461. prt_flg:    .dcb.b    1,0        *画像情報の表示/非表示フラグ
  2462.  
  2463.     .even
  2464. s_dot24:
  2465.     .dcb.w    1,8
  2466.  
  2467. crtc_tbl:
  2468.     .dc.l    mode0
  2469. crtc_data:
  2470. *        HRL  R20  R00  R01  R02  R03  R04  R05  R06  R07  R08
  2471. mode0:    .dc.w    $00,$316, $89, $0E, $2C, $6C,$237, $05, $28,$228, $1B    * 512*512 64k色モード
  2472.  
  2473. dot_tbl:
  2474.     .dc.l    dot0
  2475.  
  2476. dot_data:
  2477. dot0:    .dc.w     512,512
  2478.  
  2479. inf1:    .dc.b    'ファイル名:',0
  2480. inf2:    .dc.b    '画像サイズ:',0
  2481.     .even
  2482.  
  2483. d_pat:
  2484.     .dc.b     0, 4, 1, 5        *ディザパターン1
  2485.     .dc.b     6, 2, 7, 3
  2486.     .dc.b     1, 5, 0, 4
  2487.     .dc.b     7, 3, 6, 2
  2488.  
  2489. *    .dc.b     4, 6, 4, 6        *ディザパターン2(LDBMP Ver2互換(^^;
  2490. *    .dc.b     0, 2, 0, 2
  2491. *    .dc.b     4, 6, 4, 6
  2492. *    .dc.b     0, 2, 0, 2
  2493.     .even
  2494.  
  2495. size_table:
  2496.     .dc.l    49152            *S128_128:
  2497.     .dc.w    128,128
  2498.     .dc.l    196608            *S256_256:
  2499.     .dc.w    256,256
  2500.     .dc.l    345600            *S480_240:
  2501.     .dc.w    480,240
  2502.     .dc.l    691200            *S480_480:
  2503.     .dc.w    480,480
  2504.     .dc.l    786432            *S512_512:
  2505.     .dc.w    512,512
  2506.     .dc.l    768000            *S640_400:
  2507.     .dc.w    640,400
  2508.     .dc.l    921600            *S640_480:
  2509.     .dc.w    640,480
  2510.     .dc.l    1179648            *S768_512:
  2511.     .dc.w    768,512
  2512.     .dc.l    1228800            *S640_640:
  2513.     .dc.w    640,640
  2514.     .dc.l    2359296            *S1024_768:
  2515.     .dc.w    1024,768
  2516.     .dc.l    3145728            *S1024_1024:
  2517.     .dc.w    1024,1024
  2518.     .dc.l    3072000            *S1280_800:
  2519.     .dc.w    1280,800
  2520.     .dc.l    3686400            *S1280_960:
  2521.     .dc.w    1280,960
  2522.     .dc.l    3932160            *S1280_1024:
  2523.     .dc.w    1280,1024
  2524.     .dc.l    0            *S_OTHER:
  2525.     .dc.w    0,0
  2526.  
  2527. *****************************************************************
  2528. *    ワークエリア                        *
  2529. *****************************************************************
  2530.     .bss
  2531.     .even
  2532.  
  2533. filbuf:
  2534.     .ds.b    53            *ファイル情報格納バッファ
  2535. nambuf:
  2536.     .ds.b    92            *ファイル名展開用バッファ
  2537. arg1:
  2538.     .ds.b    256            *ファイル名バッファ
  2539. arg2:
  2540.     .ds.b    256            *IPRファイル用バッファ
  2541. prt_buf:
  2542.     .ds.b    96+3            *画面表示バッファ
  2543. num_buf:
  2544.     .ds.b    10+1            *数値変換バッファ
  2545.     .even
  2546. file_cnt:
  2547.     .ds.w    1            *ファイル数のカウント用バッファ
  2548. sp_save:
  2549.     .ds.l    1
  2550. buff_addr:
  2551.     .ds.l    1            *画像読み込みバッファアドレス
  2552. buff_size:
  2553.     .ds.l    1            *画像読み込みバッファサイズ
  2554. gr_addr:
  2555.     .ds.l    1            *画像データアドレス
  2556. fi_size:
  2557.     .ds.l    1            *ファイルサイズ
  2558. yoko:
  2559.     .ds.w    1            *画像の横(X)サイズ
  2560. tate:
  2561.     .ds.w    1            *画像の縦(Y)サイズ
  2562. line_byte1:
  2563.     .ds.w    1            *1ラインのバイト数(加工前)
  2564. line_byte2:
  2565.     .ds.w    1            *1ラインのバイト数(加工後)
  2566. crt_mode:
  2567.     .ds.w    1            *画面モード
  2568. crt_x:
  2569.     .ds.w    1            *画面のXサイズ
  2570. crt_y:
  2571.     .ds.w    1            *画面のYサイズ
  2572. x_pos:
  2573.     .ds.w    1            *ロード時のX座標
  2574. y_pos:
  2575.     .ds.w    1            *ロード時のY座標
  2576. x_max:
  2577.     .ds.w    1            *横スクロール数
  2578. y_max:
  2579.     .ds.w    1            *縦スクロール数
  2580. clr_mode:
  2581.     .ds.w    1            *画面クリアモード
  2582. vctr_r0:
  2583.     .ds.w    1            
  2584. vctr_r2:
  2585.     .ds.w    1            
  2586. line_cnt:
  2587.     .ds.w    1
  2588. esc_flg:
  2589.     .ds.b    1            *
  2590. next_flg:
  2591.     .ds.b    1            *
  2592. resize_flg:
  2593.     .ds.b    1            *
  2594. inkey_flg1:
  2595.     .ds.b    1            *
  2596. inkey_flg2:
  2597.     .ds.b    1            *
  2598. inkey_flg3:
  2599.     .ds.b    1            *
  2600. scroll_key:
  2601.     .ds.b    1            *スクロール処理のキー
  2602. cur_save:
  2603.     .ds.b    1            *
  2604. skip_flg:
  2605.     .ds.b    1            *
  2606. ipr_flg:
  2607.     .ds.b    1            *IPRファイルありなしフラグ
  2608.     .even
  2609.  
  2610. gram_x    .ds.w    1            *表示する座標(GRAM)
  2611. gram_y    .ds.w    1
  2612.  
  2613. rgb_x    .ds.w    1            *表示する座標(RGB)
  2614. rgb_y    .ds.w    1
  2615. rgb_xd    .ds.w    1            *表示するドット数
  2616. rgb_yd    .ds.w    1
  2617.  
  2618. x_line:
  2619.     .ds.w    1            *横ドット数
  2620. y_line:
  2621.     .ds.w    1            *縦ドット数
  2622. x_old:
  2623.     .ds.w    1            *前回のX座標
  2624. y_old:
  2625.     .ds.w    1            *前回のY座標
  2626. arg_ptr:
  2627.     .ds.b    4+2*2+4+2*2+2+4
  2628. work_tbl:
  2629.     .ds.b    1024
  2630.  
  2631. my_stack:
  2632.     .ds.l    1024
  2633. mysp:
  2634.     .end    start
  2635.